wayland: add extended state for tiled
authorOlivier Fourdan <ofourdan@redhat.com>
Wed, 25 May 2016 13:07:51 +0000 (15:07 +0200)
committerOlivier Fourdan <ofourdan@redhat.com>
Wed, 8 Jun 2016 12:46:37 +0000 (14:46 +0200)
xdg-shell allows desktop environments to extend the list of states
within a given range.

Use this possibility to add a new state for tiled so that gtk+ can
benefit from this.

https://bugzilla.gnome.org/show_bug.cgi?id=766860

gdk/wayland/gdkwindow-wayland.c

index 8ee469b21b2d7a48f344ec5a915a304e7275ecde..f98ff5959ea163aad56d49fc1e0c7842eac6b0c3 100644 (file)
@@ -45,6 +45,13 @@ enum {
 
 static guint signals[LAST_SIGNAL];
 
+/*
+ * Define GNOME additional states to xdg-shell
+ * The current reserved range for GNOME is 0x1000 - 0x1FFF
+ */
+
+#define XDG_SURFACE_STATE_GNOME_TILED 0x1000
+
 #define WINDOW_IS_TOPLEVEL_OR_FOREIGN(window) \
   (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD &&   \
    GDK_WINDOW_TYPE (window) != GDK_WINDOW_OFFSCREEN)
@@ -1233,6 +1240,10 @@ xdg_surface_configure (void               *data,
           break;
         case XDG_SURFACE_STATE_RESIZING:
           break;
+        /* GNOME additional states to xdg-shell */
+        case XDG_SURFACE_STATE_GNOME_TILED:
+          new_state |= GDK_WINDOW_STATE_TILED;
+          break;
         default:
           /* Unknown state */
           break;
@@ -1278,11 +1289,12 @@ xdg_surface_configure (void               *data,
     }
 
   GDK_NOTE (EVENTS,
-            g_message ("configure, window %p %dx%d,%s%s%s",
+            g_message ("configure, window %p %dx%d,%s%s%s%s",
                        window, width, height,
                        (new_state & GDK_WINDOW_STATE_FULLSCREEN) ? " fullscreen" : "",
                        (new_state & GDK_WINDOW_STATE_MAXIMIZED) ? " maximized" : "",
-                       (new_state & GDK_WINDOW_STATE_FOCUSED) ? " focused" : ""));
+                       (new_state & GDK_WINDOW_STATE_FOCUSED) ? " focused" : "",
+                       (new_state & GDK_WINDOW_STATE_TILED) ? " tiled" : ""));
 
   _gdk_set_window_state (window, new_state);
   gdk_wayland_window_sync_margin (window);